package com.算法.蓝桥杯Java_C组真题;

import java.util.HashSet;
import java.util.Set;

/*
    标题:组素数
    素数就是不能再进行等分的数。此如: 2 3 5 7 11等。
    9 = 3 * 3说明它可以3等分，因而不是素数。
    我们国家在1949年建国。如果只给你1 9 4 9这4个数字卡片，可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊，
    我们不是在脑筋急转弯!
    那么，你能组成多少个4位的素数呢?
    比如: 1949, 4919 都符合要求。
    请你提交:能组成的4位素数的个数，不要罗列这些素数!!
*/
//素数判定，素数生成（筛选），质因数分解

//解题：全排列+检查
public class title02 {

    static void f(int []arr,int k){
        if(k==4){
            check(arr);
        }
        for (int i = k; i < 4; i++) {
            int t = arr[k];
            arr[k] = arr[i];
            arr[i] = t;

            f(arr,k+1);

            t = arr[k];
            arr[k] = arr[i];
            arr[i] = t;
        }
    }
    static Set<Integer> set = new HashSet<Integer>();
    private static void check(int[] arr) {
        int x = arr[0]*1000 + arr[1]*100 + arr[2]*10 + arr[3];
        boolean flag = true;
        for (int i = 2; i < Math.sqrt(x); i++) {
            if(x % i ==0){
                flag = false;
                System.out.println(x +"==> false");
                break;
            }
        }
        if(flag){
            set.add(x);
            System.out.println(x +"==> true");
        }
    }

    public static void main(String[] args) {
        int []arr = {1,9,4,9};
        f(arr,0);
        System.out.println(set.size());
    }

}
